package componentes;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class MonitorDeCelda {
	
	//condicion
	private Lock lock = new ReentrantLock();
	private Condition bloqueado = lock.newCondition();
		
	
	public void desplazarCeldas(Celda celdaActual,Celda celdaLindante) throws InterruptedException{
		lock.lock();
		if(celdaLindante !=null){
			
			if(celdaActual.getCeldaEste()!=celdaLindante && celdaActual.getCeldaOeste()!=celdaLindante){

				while(!(!celdaActual.sinRespaldos() && !celdaLindante.ocupada())){
				//while((celdaActual.sinRespaldos() || celdaLindante.ocupada())){
					bloqueado.await();
				}
				
			}
			else{
				while(celdaLindante.ocupada()){
					bloqueado.await();
				}
			}
			Jugador jugDesp = celdaActual.getJugador();
			//if(!celdaActual.hayTesoroPropio(celdaLindante)){
				
				if(celdaActual.hayTesoroEnemigo(celdaLindante)){
					//si aparte habia un tesoro enemigo lo robo
					celdaActual.robarTesoroEnemigo(celdaLindante, jugDesp);
				}
				//System.out.println("Pisando tesoro propio");
			//}
				
				//si no hay tesoro propio me muevo
				celdaActual.sacarJugador();
				celdaLindante.ponerJugador(jugDesp);
				//imprimir
				celdaLindante.getTablero().controlDeImpresion();
				
			    bloqueado.signalAll();
		}/*else{
			System.out.println("Un jugador se esta queriendo mover a una posicion inexistente del tablero");
		}*/
			
		lock.unlock();
	}
}
